package ming.util.base;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileUtil {
	
	public static boolean copyFile(File f1,File f2){
		boolean flag = false;
		try {
			int length=2097152;
			FileInputStream in=new FileInputStream(f1);
			FileOutputStream out=new FileOutputStream(f2);
			FileChannel inC=in.getChannel();
			FileChannel outC=out.getChannel();
			ByteBuffer b=null;
			while(true){
				if(inC.position()==inC.size()){
					inC.close();
					outC.close();
				return true;
				}
				if((inC.size()-inC.position())<length){
					length=(int)(inC.size()-inC.position());
				}else{
					length=2097152;
				}
				b=ByteBuffer.allocateDirect(length);
				inC.read(b);
				b.flip();
				outC.write(b);
				outC.force(false);
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return flag;
		}
	
	/**
	 * 从网络Url中下载文件
	 * @param urlStr
	 * @param fileName
	 * @param savePath
	 * @throws IOException
	 */
	public static boolean  downLoadFromUrl(String urlStr,String fileName,String savePath) {
		URL url;
		boolean flag = false;
		//得到输入流
		InputStream inputStream = null;
		FileOutputStream fos = null;
		try {
			url = new URL(urlStr);  
			HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
			        //设置超时间为3秒
			conn.setConnectTimeout(3*1000);
			//防止屏蔽程序抓取而返回403错误
			conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

			inputStream = conn.getInputStream();  
			//获取自己数组
			byte[] getData = readInputStream(inputStream);    

			//文件保存位置
			File saveDir = new File(savePath);
			if(!saveDir.exists()){
				saveDir.mkdir();
			}
			File file = new File(saveDir+File.separator+fileName);    
			fos = new FileOutputStream(file);     
			fos.write(getData);
			flag = true;
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				if(fos!=null){
					fos.close();  
				}
				if(inputStream!=null){
					inputStream.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}

		return flag;

	}



	/**
	 * 从输入流中获取字节数组
	 * @param inputStream
	 * @return
	 * @throws IOException
	 */
	public static  byte[] readInputStream(InputStream inputStream) throws IOException {  
		byte[] buffer = new byte[1024];  
		int len = 0;  
		ByteArrayOutputStream bos = new ByteArrayOutputStream();  
		while((len = inputStream.read(buffer)) != -1) {  
			bos.write(buffer, 0, len);  
		}  
		bos.close();  
		return bos.toByteArray();  
	}  


}
